package cn.genmer.test.security.rpc.v2.rpc.protocol;

import cn.genmer.test.security.rpc.v2.rpc.transport.GCommonDecode;

import java.io.Serializable;
import java.util.UUID;

public class GHeader implements Serializable {
    // 通信协议
    // 1.协议类型
    // 2. uuid -》 requestId
    // 3. 数据长度

    // 32bit
    int flag;
    long requestId;
    long dataLength;

    public int getFlag() {
        return flag;
    }

    public void setFlag(int flag) {
        this.flag = flag;
    }

    public long getRequestId() {
        return requestId;
    }

    public void setRequestId(long requestId) {
        this.requestId = requestId;
    }

    public long getDataLength() {
        return dataLength;
    }

    public void setDataLength(long dataLength) {
        this.dataLength = dataLength;
    }

    public static GHeader createHeader(byte[] msg){
        GHeader header = new GHeader();
        header.setDataLength(msg.length);
        // 0x14 -> 0001 0100 32位可以任意控制哪个部分代表什么 like ZGC用的Colored Pointer算法（前面40几位代表寻址空间，4位代表对象状态）
        header.setFlag(GCommonDecode.SERVER_FLAG);
        header.setRequestId(UUID.randomUUID().getLeastSignificantBits());
        return header;
    }
}